package org.jsola.contract.service;

import org.jsola.contract.dao.ICategoryVariableDAO;
import org.jsola.contract.dto.CategoryVariableAddDTO;
import org.jsola.contract.dto.CategoryVariableUpdateDTO;
import org.jsola.contract.entity.CategoryVariableDO;
import org.jsola.contract.query.CategoryVariableQuery;
import org.jsola.contract.vo.CategoryVariableListVO;
import org.jsola.contract.vo.CategoryVariableVO;
import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 合同分类下模板变量
 *
 * @author JanusMix
 */
public interface ICategoryVariableService extends IService<ICategoryVariableDAO, CategoryVariableDO> {

    /**
     * 新增合同分类下模板变量
     * @param categoryVariableAddDTO 新增合同分类下模板变量DTO
     * @param tokenUser 当前用户
     * @return 合同分类下模板变量详情信息
     */
    CategoryVariableVO save(CategoryVariableAddDTO categoryVariableAddDTO, TokenUser tokenUser);

    /**
     * 修改合同分类下模板变量
     * @param categoryVariableUpdateDTO 修改合同分类下模板变量DTO
     * @param tokenUser 当前用户
     * @return 更新数量
     */
    int update(CategoryVariableUpdateDTO categoryVariableUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除合同分类下模板变量，物理删除，更新is_valid字段，从回收站删除
     * @param tokenUser 当前用户
     * @param categoryVariableIds 合同分类下模板变量id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, Long...categoryVariableIds);

    /**
     * 根据合同分类下模板变量id查找
     * @param categoryVariableId 合同分类下模板变量id
     * @param siteId 所属站点id
     * @return 合同分类下模板变量详情信息
     */
    CategoryVariableVO selectById(Long categoryVariableId, String siteId);

    /**
     * 查询合同分类下模板变量
     * @param categoryVariableQuery 查询条件
     * @param siteId 所属站点id
     * @return 合同分类下模板变量列表信息
     */
    List<CategoryVariableListVO> select(CategoryVariableQuery categoryVariableQuery, String siteId);

    /**
    * 查询合同分类下模板变量记录数
    * @param categoryVariableQuery 查询条件
    * @param siteId 所属站点id
    * @return 合同分类下模板变量记录数
    */
    int selectCount(CategoryVariableQuery categoryVariableQuery, String siteId);

    /**
     * 分页查询合同分类下模板变量
     * @param categoryVariableQuery 查询条件
     * @param siteId 所属站点id
     * @return 合同分类下模板变量列表信息
     */
    Page<CategoryVariableListVO> selectPage(CategoryVariableQuery categoryVariableQuery, String siteId);


    /**
     * 根据合同分类下模板变量id查找
     * @param categoryVariableId 合同分类下模板变量id
     * @param siteId 所属站点id
     * @return 合同分类下模板变量
     */
    CategoryVariableDO selectDOById(Long categoryVariableId, String siteId);

    /**
     * 查询合同分类下模板变量
     * @param categoryVariableQuery 查询条件
     * @param siteId 所属站点id
     * @return 合同分类下模板变量列表
     */
    List<CategoryVariableDO> selectDO(CategoryVariableQuery categoryVariableQuery, String siteId);
}


